
;(function(){
    var OBJ={};

    function MapPosition(id,parm,callback){
        var _this=this;
        OBJ=this;
        
        _this._id=id;
        _this._fun=callback||Function;
        _this._centerPoint='';
        //默认位置
        _this._positionPoint='';
        //重置位置  
       var  _current_positionPoint=''          
        _this._config={
            //绘制折线的样式
            ToolDisplay:"block",
            position:{
                lng:null,
                lat:null,
            },
            btnTex:"编辑"
        }
        //debugger;
        this.getConfig(parm,this._config);
        //debugger
        this.init();

        this.createTools();
        this.addIco(_this._config.position.lng,_this._config.position.lat);
    }

    MapPosition.prototype={
        //初始化
        init:function(){
            //debugger;
            var _this=this;
            _this._map = new BMap.Map(_this._id);
            _this._centerPoint =  new BMap.Point(109.717426,19.27341);
            _this._map.centerAndZoom(_this._centerPoint,9); 
             //根据浏览器定位
            // var geolocation = new BMap.Geolocation();
            // geolocation.getCurrentPosition(function(r){
            //    // alert(123);
            //     _this._map.centerAndZoom(r.point,12);
            //     _this._centerPoint=r.point;
                        
            // },{enableHighAccuracy: true})
            _this._map.enableScrollWheelZoom();
            _this._map.disableDoubleClickZoom();
            //_this.createMask();

        },
        getConfig:function(obj,obj2){
            var _this=this;
            if(obj&&obj!=''){
                $.extend(obj2, obj2,obj);
            }else{
                return false;
            }
        },
         //创建控制按钮
        createTools:function(){
            var _this=this;
            var _html='<div style="display:'+_this._config.ToolDisplay+'" class="createTools" id="'+_this._id+'tools">';
                _html+='<label  class="gis-cancel gis-btn active"><span></span>'+_this._config.btnTex+'</label><label class="gis-cancel gis-btn"><span></span>取消</label><label class="gis-save gis-btn"><span></span>保存</label>'
                _html+='</div>';      
            $("#"+_this._id).append(_html); 
            //绑定按钮功能
            $("#"+_this._id+"tools label span").click(function(event){
                event.stopPropagation()
            })
            var buttons=$("#"+_this._id+"tools label");
            buttons.each(function(i){                        
                $(this).click(function(){
                    if(i==0){
                      _this.moveMask();
                      $(this).removeClass("active");
                      buttons.eq(1).addClass("active");
                      buttons.eq(2).addClass("active");
                      _this.reAddIco();
                      _this.createMask();
                    }else if(i==1){
                       _this._positionPoint;
                        $(this).removeClass("active");
                        buttons.eq(0).addClass("active");
                        buttons.eq(2).removeClass("active");
                        _this.rePosition();
                         _this.moveMask();
                         _this.removeReAddIco();
                        
                    }else{
                        $(this).removeClass("active");
                        buttons.eq(0).addClass("active");
                        buttons.eq(1).removeClass("active");
                        _this.moveMask();
                       // debugger;
                        _this.removeReAddIco();
                        _this._fun(_this._current_positionPoint);
                        
                    }
                });
            });
        },
        //创建遮罩
        createMask:function(){
            var _this=this;
            _this.moveMask();
            var mask  = document.createElement("div");
            var size = this._map.getSize();
            mask.style.cssText = "z-index:9999;position:absolute;background:rgba(255,255,0,.1);cursor:crosshair;width:" + size.width + "px;height:" + size.height + "px";
            _this._mask=_this._map.getPanes().floatPane.appendChild(mask);
           // console.log(_this._styleOpion);
            //console.log(_this._mask,"_this._mask");
            //mmm=_this._mask;
            //绑定鼠标移动遮罩位置重置
            _this._mask.onmousemove=function(e){
                _this.resetMaskPosition();
            }
        },
        //移除遮罩
        moveMask:function(){
            var _this=this;
            if(_this._mask&&_this._mask.parentNode){
                _this._mask.parentNode.removeChild(_this._mask);
            }                
        },
        //地图移动时候重置遮罩的位置
        resetMaskPosition:function(){
            var _this=this;
            var point = _this._map.pixelToPoint(new BMap.Pixel(0, 0));                    
            console.log(point,"point");
            var pixel = _this._map.pointToOverlayPixel(point);
            //console.log(point,"jfasjdfkajsdfljk",new BMap.Pixel(0, 0),pixel);
            _this._mask.style.left = pixel.x + "px";
            _this._mask.style.top  = pixel.y + "px"; 
        },
        //添加标注
        addIco:function(lng,lat,flag){
           // debugger;
            var _falg=flag||false;
            var _this=this;
            var lng_ret= /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/;
            var lat_ret= /^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/;
            if(lng_ret.test(lng)&&lat_ret.test(lat)){
                //debugger;
                 var point = new BMap.Point(lng,lat);
                 if(!_falg){
                    _this._map.centerAndZoom(point, 12);
                 }
                var marker = new BMap.Marker(point);  // 创建标注
                _this._map.addOverlay(marker);              // 将标注添加到地图中
                
                if(!!_falg) return false;
                _this._positionPoint=point;
            }
        },
        //点击地图重新绘制坐标
        reAddIco:function(){
            var _this=this;
            _this._map.addEventListener("click",_this.drawIco);
        },
        
        //接触点击事件
        drawIco:function (e){
            var _this=OBJ;
           // alert(e.point.lng + "," + e.point.lat);
            _this.clearoverlays();
            _this.addIco(e.point.lng,e.point.lat,true);
            _this._current_positionPoint=e.point; 
        },
        //删除click监听
        removeReAddIco:function(){
            var _this=this;
            _this._map.removeEventListener("click",_this.drawIco);
        },
        //点击地图重置位置
        rePosition:function(){
            var _this=this;
            _this.clearoverlays();
             _this.addIco( _this._positionPoint.lng, _this._positionPoint.lat); 

        },


         //清除覆盖物
        clearoverlays:function(){
            var _this=this;
            _this._map.clearOverlays();
        },


    }
    //注册到window上
    window.mapPosition=function(id,pram,callback){
        //debugger;
        return new MapPosition(id,pram,callback);
    }
})();









